/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao.impl;

import dao.Conexao;
import dao.LojaDaoException;
import dao.ProdutoDao;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import model.Produto;

/**
 *
 * @author Jorley
 */
public class ProdutoDaoImpl implements ProdutoDao{
    
    private Connection conn;
    
    public ProdutoDaoImpl() throws LojaDaoException {
        try {
            conn = Conexao.getConnection();
        } catch (LojaDaoException e){
            throw new LojaDaoException("Erro: ao instanciar o ProdutoDaoImpl \n" + e.getMessage());
        }
    }

    @Override
    public void atualizar(Produto produto) throws LojaDaoException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void excluir(Produto produto) throws LojaDaoException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public void salvar(Produto produto) throws LojaDaoException {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public List<Produto> todosProdutos() throws LojaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM produto";
            conn1 = this.conn;
//            ps = conn1.prepareStatement(sql);
//            rs = ps.executeQuery();
            Statement stmt = conn1.createStatement();
            rs = stmt.executeQuery(sql);
//            ps = conn1.prepareStatement(sql);
//            rs = ps.executeQuery(sql);
            List<Produto> listaProdutos = new ArrayList<Produto>();
            while (rs.next()) {
                Produto produto = new Produto(rs.getInt("codigo"), rs.getString("nome"), rs.getString("tipo"), rs.getString("descricao"), 
                                              rs.getString("marca"), rs.getString("peso"), rs.getString("dimensoes"), rs.getBigDecimal("preco"),
                                              rs.getBoolean("ativo"));
                
                listaProdutos.add(produto);
            }
            return listaProdutos;
        } catch (SQLException e){
            throw new LojaDaoException("Erro ao listar os Produtos" + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    @Override
    public Produto buscarProduto(Integer codProduto) throws LojaDaoException {
        PreparedStatement ps = null;
        Connection conn1 = null;
        ResultSet rs = null;
        try {
            String sql = "SELECT * FROM produto WHERE codigo=?";
            conn1 = this.conn;
            ps = conn1.prepareStatement(sql);
            ps.setInt(1, codProduto);
            rs = ps.executeQuery();
            Produto produto = null;
            while (rs.next()){
               produto = new Produto(rs.getInt("codigo"), rs.getString("nome"), rs.getString("tipo"), rs.getString("descricao"), 
                       rs.getString("marca"), rs.getString("peso"), rs.getString("dimensoes"), rs.getBigDecimal("preco"), rs.getBoolean("ativo"));
            }
            return produto;
        } catch (SQLException e){
            throw new LojaDaoException("Erro ao procurar o produto " + e);
        } finally {
            Conexao.closeConnection(conn1, ps, rs);
        }
    }

    
}
